关键字POI搜索 Sample详情
最后更新时间:2020年12月15日
POI查询的关键字搜索方式,即根据用户输入的关键字、选择的类型进行模糊查询,搜索满足条件的POI信息点,可以通过标注、绘制或者列表方式展示查询到的兴趣点。
在进行POI查询之前,需准备POI数据,详细步骤参考POI数据组织模块,在此不赘述,接下来讲解具体的关键字搜索的编码实现方法。
1
首先,创建并初始化POI查询对象,设置POI数据。
// 创建POI查询对象 PoiSearch mPoiSearch = new PoiSearch(); //为POI查询对象设置配置好的.db数据,并以此来初始化 mPoiSearch.initWithDBPath(Environment.getExternalStorageDirectory().getPath()+"/MapGISSample/POI/WuHanPOI.db"); //设置查询每页的结果数目 mPoiSearch.setPageSize(40);
2
进行关键字POI搜索,需要在查询之前设置条件,首先构造查询条件对象PoiSearch.Query,然后利用其接口设置查询的关键字、查询的POI类型。
// 设置POI查询条件:关键字与POI信息类型 PoiSearch.Query mQuery = new PoiSearch.Query("武汉", PoiTypeDef.TouristAttraction, null); mPoiSearch.setQuery(mQuery);
代码说明:PoiSearch.Query的第一个参数为查询关键字的字符串;第二个参数为POI类型的组合,例如为景点类型(PoiTypeDef.TouristAttraction),也可定义组合(如餐馆 + 电影院 + 景点);第三个参数为设置查询POI的城市。
SDK中提供的POI具体分类如下表所示,代码中由com.zondy.mapgis.poisearch.PoiTypeDef的字段提供,用户可以根据自己需要选择,在实际项目应用中,可以将这些类型以列表或其他形式展示给终端用户,从而让用户自行选择类型。
POI一级分类 | POI二级分类 | PoiTypeDef字段 |
---|---|---|
所有POI类型 | 类型的全集 | All |
住宿服务 | 宾馆 | Accommodation |
汽车服务 | 加油站 | AutoCarService |
科教文化 | 学校 | Education |
餐饮服务 | 中餐厅 | FoodBeverages |
体育休闲服务 | 娱乐场所,网吧 | InternetBar |
医疗相关服务 | 综合医院 | MedicalService |
公共设施 | 公共厕所 | PublicService |
交通设施服务 | 停车场 | PublicParkingLot |
地铁站 | PublicSubway | |
公交车站 | PublicTransportation | |
购物中心 | 商场 | Shopping |
超市 | SuperMarket | |
风景名胜 | 景点 | TouristAttraction |
3
查询POI,遍历查询结果,并以文本图形、标注形式展示,核心代码如下:
//查询并返回结果 PoiPagedResult searchPoiResult = mPoiSearch.searchPOI(); //判断是否查询到了结果 if (searchPoiResult != null && searchPoiResult.getTotalPOICount() > 0) { //遍历所有页 for (int i = 1; i <= searchPoiResult.getPageCount(); i++) { List<PoiItem> poiItemList = searchPoiResult.getPage(i); //获取每一页的结果集,从1开始 for (int j = 0; j < poiItemList.size(); j++) {//遍历每一页的结果项 //获取POI项 PoiItem poiItem = poiItemList.get(j); //获取POI点信息:坐标、名称、地址、电话 Dot point = poiItem.getPoint(); String name = poiItem.getName(); String address = poiItem.getAddress(); String phoneNum = poiItem.getTel(); } } mapView.refresh(); //地图刷新 } else { Toast.makeText(this, "查询结果为空", Toast.LENGTH_SHORT).show(); }
查询到POI结果后,可以通过文本图形、地图标注进行展示:
// 获取标注图标 bmp = BitmapFactory.decodeResource(getResources(), R.drawable.location); // 创建文本,添加到绘图层 GraphicText pointText = new GraphicText(); pointText.setPoint(PointTransferUtil.Lonlat2Mercator(point));//坐标点 pointText.setText(name);//文本 pointText.setFontSize(38);//文字大小 pointText.setReferenceInfo(10, 15, 2, new PointF(15, 3));//锚点 mapView.getGraphicsOverlay().addGraphic(pointText); // 创建annotation,添加到标注层 Annotation annotationPOI = new Annotation(name, address, PointTransferUtil.Lonlat2Mercator(point), bmp); annotationPOI.setCanShowAnnotationView(true); mapView.getAnnotationsOverlay().addAnnotation(annotationPOI);
展示效果如下图所示: